# 路线规划与管理系统 Dockerfile
# 作者: cencat
# 创建时间: 2024-12-19
# 描述: CenCat SaaS平台路线规划与管理系统的Docker镜像构建文件

# 使用官方OpenJDK 17作为基础镜像
FROM openjdk:17-jdk-slim

# 维护者信息
MAINTAINER cencat <cencat@example.com>
LABEL description="CenCat SaaS平台 - 路线规划与管理系统" \
      version="1.0.0" \
      author="cencat" \
      build-date="2024-12-19"

# 设置工作目录
WORKDIR /app

# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 安装必要的工具和依赖
RUN apt-get update && apt-get install -y \
    curl \
    wget \
    vim \
    net-tools \
    procps \
    dumb-init \
    fontconfig \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get clean

# 创建应用用户（安全考虑）
RUN groupadd -r cencat && useradd -r -g cencat cencat

# 创建日志目录
RUN mkdir -p /app/logs /app/temp /app/data \
    && chown -R cencat:cencat /app

# 复制jar文件
ARG JAR_FILE=target/cencat-route.jar
COPY ${JAR_FILE} /app/cencat-route.jar

# 设置文件权限
RUN chown cencat:cencat /app/cencat-route.jar \
    && chmod 755 /app/cencat-route.jar

# 切换到应用用户
USER cencat

# 暴露端口
EXPOSE 8083

# JVM参数配置
ENV JAVA_OPTS="-server \
    -Xms512m \
    -Xmx2048m \
    -XX:+UseG1GC \
    -XX:G1HeapRegionSize=16m \
    -XX:+UseG1OptionalCollectionSet \
    -XX:+G1UseAdaptiveIHOP \
    -XX:G1MixedGCCountTarget=8 \
    -XX:G1HeapWastePercent=5 \
    -XX:+UnlockExperimentalVMOptions \
    -XX:+UseJVMCICompiler \
    -XX:+PrintGCDetails \
    -XX:+PrintGCTimeStamps \
    -XX:+PrintGCApplicationStoppedTime \
    -Xloggc:/app/logs/gc.log \
    -XX:+UseGCLogFileRotation \
    -XX:NumberOfGCLogFiles=10 \
    -XX:GCLogFileSize=10M \
    -XX:+HeapDumpOnOutOfMemoryError \
    -XX:HeapDumpPath=/app/logs/heapdump.hprof \
    -Djava.awt.headless=true \
    -Djava.security.egd=file:/dev/./urandom \
    -Dfile.encoding=UTF-8 \
    -Duser.timezone=Asia/Shanghai \
    -Djava.io.tmpdir=/app/temp"

# 应用配置
ENV SPRING_PROFILES_ACTIVE=docker
ENV SERVER_PORT=8083
ENV MANAGEMENT_SERVER_PORT=8084

# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
    CMD curl -f http://localhost:8084/actuator/health || exit 1

# 启动命令
ENTRYPOINT ["dumb-init", "--"]
CMD ["sh", "-c", "java $JAVA_OPTS -jar /app/cencat-route.jar"]

# 元数据标签
LABEL org.opencontainers.image.title="CenCat Route Planning System" \
      org.opencontainers.image.description="CenCat SaaS平台的路线规划与管理系统" \
      org.opencontainers.image.version="1.0.0" \
      org.opencontainers.image.authors="cencat" \
      org.opencontainers.image.vendor="CenCat" \
      org.opencontainers.image.licenses="MIT" \
      org.opencontainers.image.source="https://github.com/cencat/my-cencat" \
      org.opencontainers.image.documentation="https://github.com/cencat/my-cencat/blob/main/cencat-route/README.md"